package com.roin.learn.springsecurity.util;

import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.AES;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;

import java.util.Scanner;

/**
 * 配置加密工具
 * mybatis-plus提供了为配置文件里的重要参数进行加密的安全保护，详细使用说明https://baomidou.com/guide/safety.html
 * 这个工具用于给参数进行加密
 * 使用方法：
 * 1，在已密码的参数前加上： mpw:
 * 2，jar启动时增加jar启动参数 --mpw.key=你的加密密钥。IDEA启动时设置Program arguments
 */
public class ConfigEncryptUtil {


    public static void main(String[] args) {
        String tip = "此工具用于给配置参数进行加密（基于mybatis-plus），使用方法：\n1，在已密码的参数前加上： mpw:\n2，jar启动时增加jar启动参数 --mpw.key=16位加密密钥。IDEA启动时设置Program arguments,服务器可以设置为启动环境变量";
        System.out.println(tip);
        //生成 16 位AES密钥，也可以自行设置16位长度的密钥
        String key = AES.generateRandomKey();
        System.out.println("16位随机密钥为："+key+"\n请保管好此密钥，不要公开！！！");
        while (true){
            String data = scanner("待加密数据");
            if (data.equals("quit")) {
                System.exit(0);
            }
            String str = AES.encrypt(data,key);
            System.out.println("加密结果："+str);
        }
    }

    /**
     * <p>
     * 读取控制台内容
     * </p>
     */
    public static String scanner(String tip) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder help = new StringBuilder();
        help.append("请输入" + tip + "(退出输入quit)：");
        System.out.println(help.toString());
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if (StringUtils.isNotBlank(ipt)) {
                return ipt;
            }
        }
        throw new MybatisPlusException("请输入正确的" + tip + "！");
    }
}
